View Javadoc

1   /**
2    * Copyright 2008 WebPhotos
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package net.sf.webphotos.gui.util;
17  
18  import javax.swing.table.*;
19  import net.sf.webphotos.Album;
20  import net.sf.webphotos.PhotoDTO;
21  import net.sf.webphotos.gui.PainelWebFotos;
22  
23  /**
24   * Gera o modelo da tabela de fotos.
25   */
26  public class TableModelFoto extends AbstractTableModel {
27  
28      private static final long serialVersionUID = -3797898104363613961L;
29      private static final TableModelFoto instancia = new TableModelFoto();
30      private Object[][] fotoTabela;
31      private String[] fotoColunas;
32  
33      private TableModelFoto() {
34      }
35  
36      /**
37       * Retorna a instância da própria classe.
38       * @return Retorna um TableModelFoto.
39       */
40      public static TableModelFoto getModel() {
41          return instancia;
42      }
43  
44      /**
45       * Armazena os dados de fotos em duas variáveis da classe.
46       * Na variável fotoTabela, as fotos e seus dados específicos.
47       * E na variável fotoColunas somente os dados específicos.
48       */
49      public void update() {
50          fotoTabela = Album.getAlbum().getFotosArray();
51          fotoColunas = Album.getAlbum().getFotosColunas();
52      }
53  
54      /**
55       * Recebe um número referente a uma coluna e retorna o valor da coluna através do vetor fotoColunas.
56       * @param column Número referente a coluna.
57       * @return Retorna o valor contido na coluna.
58       */
59      @Override
60      public String getColumnName(int column) {
61          return fotoColunas[column];
62      }
63  
64      /**
65       * Retorna o total de colunas, contando o número de posições no vetor fotoColunas.
66       * @return Retorna o total de colunas.
67       */
68      @Override
69      public int getColumnCount() {
70          if (fotoColunas == null) {
71              return 0;
72          }
73          return fotoColunas.length;
74      }
75  
76      /**
77       * Retorna o total de linhas, contando o número de posições no vetor fotoTabela.
78       * @return Retorna o total de linhas.
79       */
80      @Override
81      public int getRowCount() {
82          if (fotoTabela == null) {
83              return 0;
84          }
85          return fotoTabela.length;
86      }
87  
88      /**
89       * Busca um valor contido na matriz fotoTabela e retorna um Object.
90       * Recebe como parâmetro um índice de linha e um de coluna para efetuar a procura.
91       * @param line Número da linha.
92       * @param column Número da coluna.
93       * @return Retorna o valor encontrado em um Object.
94       */
95      @Override
96      public Object getValueAt(int line, int column) {
97          return fotoTabela[line][column];
98      }
99  
100     /**
101      * Recebe um valor e os índices da matriz e seta esse valor na matriz fotoTabela.
102      * Checa se a foto possui ID ou nome, depois testa se o valor é de legenda ou crédito e implanta na matriz fotoTabela.
103      * @param value Valor a ser implantado.
104      * @param line Número da linha.
105      * @param column Número da coluna.
106      */
107     @Override
108     public void setValueAt(Object value, int line, int column) {
109         // testar para verificar se fotoID é um número ou um nome de arquivo
110         int fotoID = 0;
111         String nomeFoto = "";
112         try {
113             fotoID = Integer.parseInt(fotoTabela[line][0].toString());
114         } catch (Exception e) {
115             nomeFoto = fotoTabela[line][0].toString();
116         }
117 
118         // Qual campo está editando ?
119         if (column == 1) {
120             // usuário está editando coluna legenda
121             // atualiza o modelo
122             fotoTabela[line][column] = value;
123             // atualiza objeto foto
124             if (fotoID > 0) {
125                 Album.getAlbum().getFoto(fotoID).setLegenda((String) value);
126             } else {
127                 Album.getAlbum().getFoto(nomeFoto).setLegenda((String) value);
128             }
129             // ajusta o texto da legenda
130             PainelWebFotos.getTxtLegenda().setText((String) value);
131         } else if (column == 2) {
132             // usuário está editando coluna crédito (combobox)
133             fotoTabela[line][column] = value;
134             if (fotoID > 0) {
135                 Album.getAlbum().getFoto(fotoID).setCreditoNome((String) value);
136             } else {
137                 Album.getAlbum().getFoto(nomeFoto).setCreditoNome((String) value);
138             }
139             int indice = PhotoDTO.getLstCreditosIndex((String) value);
140             // soma 1 ao indice, pois o primeiro value é espaço vazio
141             //PainelWebFotos.getLstCreditos().setSelectedIndex(indice + 1);
142             // FIXME : Retornar comportamento original com linha em branco
143             PainelWebFotos.getLstCreditos().setSelectedIndex(indice);
144         }
145     }
146 
147     /**
148      * Checa se o número de colunas é maior que zero e retorna <I>true</I>, caso contrário retorna <I>false</I>.
149      * TODO: avaliar a funcionalidade desse método.
150      * @param line Número da linha.
151      * @param column Número da coluna.
152      * @return Retorna um valor lógico.
153      */
154     @Override
155     public boolean isCellEditable(int line, int column) {
156         if (column > 0) {
157             return true;
158         }
159         return false;
160     }
161 
162     /**
163      * Retorna a classe do objeto encontrado na matriz fotoTabela.
164      * Busca a partir do valor do número da coluna recebido como parâmetro.
165      * @param column Número da coluna.
166      * @return Retorna uma classe.
167      */
168     @Override
169     public Class<? extends Object> getColumnClass(int column) {
170         return fotoTabela[0][column].getClass();
171     }
172 
173     @Override
174     public Object clone() throws CloneNotSupportedException {
175         throw new CloneNotSupportedException("Singleton Object");
176     }
177 }